package com.example.demo.col.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import java.io.IOException;

/**
 * 实现一个长连接 类似chatGPT形式输出等待事件较长内容
 */
@RestController
public class LongConnectionController {

    /**
     * 每100毫秒输出一次数据
     * @return
     */
    @GetMapping(value = "/long-connection", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public SseEmitter handleLongConnection() {
        SseEmitter emitter = new SseEmitter();

        // 启动一个新的线程来模拟每 100 毫秒输出一次数据
        new Thread(() -> {
            try {
                while (true) {
                    String message = "模拟输出内容: " + System.currentTimeMillis();
                    emitter.send(message);  // 发送消息给客户端
                    Thread.sleep(100);  // 每 100 毫秒发送一次
                }
            } catch (IOException | InterruptedException e) {
                e.printStackTrace();
                emitter.completeWithError(e);  // 发生异常时关闭连接
            }
        }).start();

        // 返回 emitter，SSE 将保持 HTTP 连接
        return emitter;
    }
}